﻿using System;

namespace Affinity.Synthesis.ExpressionCells
{
    /// <summary>
    /// The interface underlying all expression cells.
    /// </summary>
    internal interface IExpressionCell
    {
        /// <summary>
        /// Copies this expression cell.
        /// </summary>
        /// <returns></returns>
        IExpressionCell Copy();

        /// <summary>
        /// Gets or sets this expression cell's inputs.
        /// </summary>
        ExpressionCellValue[] Inputs { get; set; }

        /// <summary>
        /// Gets this expression cell's array of metadata.
        /// </summary>
        object[] Metadata { get; }

        /// <summary>
        /// Gets the ExpressionCellValue representing this expression cell's output.
        /// </summary>
        ExpressionCellValue Output { get; }
    }
}
